package com.xjc.infra.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;

/**
 * 类型转换
 * @author liangcz
 * @Date   2017年9月14日 下午5:22:29
 * @version 1.0
 */
public class ClassUtil {
	/**
	 * 将字符串类型""熟悉转为null
	 * @author liangcz
	 * @date   2017年9月14日 下午4:46:38
	 * @return T
	 */
	public static <T> T transferBlankToNull(T t){
		Class<? extends Object> clazz = t.getClass();
		Field[] fields = t.getClass().getDeclaredFields();
		for (Field field : fields) {
			try {
				Type type = field.getGenericType(); 
				if (type.equals(String.class)) { 
					Method getMethod = clazz.getMethod("get" + changeCamel(field.getName())); 
					Object value = getMethod.invoke(t);
					if("".equals(value)){
						Method setMethod = clazz.getMethod("set" + changeCamel(field.getName()), new Class[] { String.class });
						setMethod.invoke(t, new Object[] {null});
					}
				}
			} catch (Exception e) {
				
			}
		}
		return t;
	}
	/**
	 * 获取属性的驼峰方法
	 * @author liangcz
	 * @date   2017年9月14日 下午4:57:22
	 * @return String
	 */
	private static String changeCamel(String fieldName) {
		if (fieldName != null) {
			StringBuffer sb = new StringBuffer(fieldName);
			sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
			return sb.toString();
		} else {
			return null;
		}
	}
	/**
	 * 获取当前class文件全限定名
	 * @author lqf
	 * @Date 2017/6/12
	 * @param st
	 * @return
	 */
	public static  String getCurClassName(StackTraceElement[] st ){
		return st[1].getClassName();
	}
	
	/**
	 * 获取当前方法名
	 * @author lqf
	 * @Date 2017/6/12
	 * @param st
	 * @return
	 */
	public static  String getCurMetherName(StackTraceElement[] st ){
		return st[1].getMethodName();
	}
	
	/**
	 * 获取当前文件名
	 * @author lqf
	 * @Date 2017/6/12
	 * @param st
	 * @return
	 */
	public static  String getCurFileName(StackTraceElement[] st ){
		return st[1].getFileName();
	}
	
	/**
	 * 获取当前方法全限定名
	 * @author lqf
	 * @Date 2017/6/12
	 * @param st
	 * @return
	 */
	public static  String getAbsoluteMethodName(StackTraceElement[] st ){
		return st[1].getClassName() +"."+ st[1].getMethodName();
	}
}
